/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package doc2db.DbManager;

import doc2db.Keey;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.logging.Logger;

/**
 * <p><b>Класс совершающий соеденения с БД и посылает запросы</b></p>
 * @author yuriy
 */
public class DBManager {

    private static final Logger LOG = Logger.getLogger("doc2db.DbManager");
    private Statement stat;
    private Connection conn;
    private List<String> tablName = new ArrayList<String>();
    private String fileName;

    /**
     * <p><b>Конструктор </b></p>
     * <p>приы вызове открывается конект к БД</p>
     * @param dbURL <p>адрес БД</p>
     * @param properties <p>пользовательские параметры {name password}</p>
     */
    public DBManager(String dbURL, Properties properties) {

        try {
            Class.forName("org.postgresql.Driver");
            this.conn = DriverManager.getConnection(dbURL, properties);
        } catch (SQLException e) {
            System.err.println("Troubles while loading PostgreSQL JDBC driver:" + e);
        } catch (ClassNotFoundException e) {
            System.err.println("Troubles - database cannot be accessed:" + e);
        }

    }

    /**
     * <p><b>Конструктор </b></p>
     * <p>приы вызове открывается конект к БД</p>
     * @param dbURL <p>адрес БД</p>
     * @param properties <p>пользовательские параметры {name password}</p>
     * @param file <p>Обрабатываемы файл</p>
     */
    public DBManager(String dbURL, Properties properties, String file) {

        try {
            Class.forName("org.postgresql.Driver");
            this.conn = DriverManager.getConnection(dbURL, properties);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        fileName = file;
        String replace = fileName.replace("/", "_");
        fileName = replace;
        String replace1 = fileName.replace("\\", "_");
        fileName = replace1;
        String replace2 = fileName.replace(".", "_");
        fileName = replace2;
    }

    /**
     * <p>начать (создать соеденение)</p>
     */
    public void begin() {
        try {
            stat = conn.createStatement();
            if (!Keey.client_encoding.equals("null")) {
                stat.execute("set client_encoding to '" + Keey.client_encoding + "'");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    /**
     * <p>выполнить запрос к БД</p>
     * @param s <p>выполняемый запрос к БД</p>
     */
    public void sql(String s, boolean serrError) {
        try {
            stat.execute(s);
        } catch (SQLException e) {
            if (serrError) {
                System.err.println("!ERROR:" + e + " : " + s);
            }
        }

    }

    /**
     * <p>commit</p>
     */
    public void commit() {
        try {
            conn.commit();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /**
     *  <p>Закрыть конект с БД</p>
     */
    public void close() {
        try {
            conn.close();
        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        this.close();
    }
}
